跳到主要内容

MongoDB 环境搭建

前置准备

mongodb 对大小写是敏感的

先从官网下载,因为 MongoDB 分为企业版和社区版,前者是需要收费的,因此这里下载 社区版

如果使用 Ubuntu,则参考 Install MongoDB Community Edition on Ubuntu

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
sudo apt-get install gnupg
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

安装完后

$ mongo -version

MongoDB shell version v5.0.9
Build Info: {
"version": "5.0.9",
"gitVersion": "6f7dae919422dcd7f4892c10ff20cdc721ad00e6",
"openSSLVersion": "OpenSSL 1.1.1f 31 Mar 2020",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "ubuntu2004",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}

注意 mongod 和 mongo 的区别,前者是启用 MongoDB 进程,后者是对 MongoDB 进行连接操作,在执行 mongod 命令启用 MongoDB 进程(服务器)的基础上,再使用 mongo 对其进行连接操作

启动 Mongodb 服务

默认情况下 MongoDB 启动后会初始化以下两个目录:

数据存储目录:/var/lib/mongodb 日志文件目录:/var/log/mongodb

我们在启动前可以先创建这两个目录并设置当前用户有读写权限:

sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
# whoami 是显示当前登录的用户
sudo chown `whoami` /var/lib/mongo # 设置权限
sudo chown `whoami` /var/log/mongodb # 设置权限

接下来启动 Mongodb 服务:

mongod \
--dbpath /var/lib/mongo \
--logpath /var/log/mongodb/mongod.log \
--forkmo

检查日志

$ tail -10f /var/log/mongodb/mongod.log

MongoDB 后台管理 Shell

MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell,用来对 MongoDB 进行操作和管理的交互式环境。它使用 mongo 命令启动

$ mongo

由于它是一个 JavaScript shell,所以可以运行一些简单的算术运算:

> 2+2
4
> 3+6
9
>

检查当前数据库状态

> db.stats()
{
"db" : "test",
"collections" : 0,
"views" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"totalSize" : 0,
"indexes" : 0,
"indexSize" : 0,
"scaleFactor" : 1,
"fileSize" : 0,
"fsUsedSize" : 0,
"fsTotalSize" : 0,
"ok" : 1
}

可以使用 db.help() 列出一个命令列表

修改文件描述符限制

修改操作系统对 MongoDB 的限制(大多数类 Unix 操作系统限制了进程可能使用的系统资源),从 MongoDB 4.4 开始,如果打开文件数的 ulimit 值小于 64000,则会生成启动错误。

# 使用 ulimit 命令显示当前系统的限制
$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 50801
-n: file descriptors 1024
-l: locked-in-memory size (kbytes) 64
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 50801
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited

这里主要关注 ulimit -n 的值,这里通过修改 /etc/security/limits.conf 进行设置

# vi /etc/security/limits.conf 添加以下内容
# 哪个用户启动就用哪个用户
* soft nproc 65533
* hard nproc 65533
* soft nofile 65533
* hard nofile 65533
root soft nproc 65533
root hard nproc 65533
root soft nofile 65533
root hard nofile 65533

修改 /etc/systemd/user.conf 以及 /etc/systemd/system.conf 添加以下内容

DefaultLimitNOFILE=65535

查看 mongodb 进程限制

cat /proc/pid/limits  # pid 为 mongod 的进程id

安装好之后可以在控制台进入 Shell

连接到 MongoDB

标准 URI 连接语法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

# mongodb:// 这是固定的格式,必须要指定(就像 URL 前面的协议头一样)
# username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
# host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
# portX 可选的指定端口,如果不填,默认为27017
# /database 如果指定 username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
# ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

# 实例
mongodb://localhost
mongodb://admin:123456@localhost/
mongodb://example1.com:27017,example2.com:27017

端口默认为 27017